/**
 * 防抖：防抖是指在事件触发n秒后再执行回调，如果n秒内再次被触发，则重新计算时间。
 * @param fn 代表一个函数，里面可能会频繁发生回调或ajax请求
 * @param delay 表示间隔多少毫秒才触发，默认500毫秒
 * @returns 
 */
export function debounce(fn:Function,delay=500) {
    let timer:NodeJS.Timeout | null = null
    return function () {
        if(timer){
            console.log(6666);
            clearTimeout(timer)
        }
        timer = setTimeout(()=>{
            console.log(8888);
            fn.apply(fn,arguments);
            timer = null;
        },delay)
    }
}
/**
 * 节流：节流是指如果持续触发某个事件,则每隔n秒执行一次
 * @param fn 表一个函数，里面可能会频繁发生回调或ajax请求
 * @param delay 表示间隔多少毫秒才触发，默认100毫秒
 * @returns 
 */
export function throttle(fn:Function,delay=100) {
    //首先设置一个变量,在没有执行我们的定时器时为null
    let timer:NodeJS.Timeout | null = null
    return function () {
        //当我们发现这个定时器存在时,则表示定时器已经在运行中，需要返回
        if(timer) return
        timer = setTimeout(()=>{
            fn.apply(fn,arguments);
            timer = null;
        },delay)
    }
}
